[Amazon FSx for NetApp ONTAP] SnapMirrorを使ったSMBサーバーの切り替え手順を整理してみた
Amazon FSx for NetApp ONTAPのSMBサーバーをSnapMirrorのレプリケーション先の別SMBサーバーに切り替えたい
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSxN)のSMBサーバーをSnapMirrorのレプリケーション先である別SMBサーバーに切り替えたいなと思ったことはありますか? 私はあります。
SnapMirrorを使用することで、定期的にFSxNのボリュームをレプリケーションすることが可能です。SnapMirrorの概要や詳細な操作は以下記事をご覧ください。
では、実際にSnapMirrorを用いて業務を別SMBサーバーに切り替えをする際にはどのようなステップが必要でしょうか。
以下NetApp KBには簡単に記載されています。
せっかくなので、具体的な下準備や切り替え(フェイルオーバー)時のオペレーションを整理してみました。
いきなりまとめ
- 事前準備
- クラスターピアリング
- SVMピアリング
- 転送先SMBサーバーの設定
- 例)
- SMB暗号化
- SMBバージョン
- NASアクセスの監査ログ
- ボリュームのデフォルト言語設定
- 例)
- SnapMirrorの設定
- DNS CNAMEレコードの設定
- 転送先ボリュームのジャンクションパスの設定
- 転送先SMBサーバー上にSMBファイル共有の設定
- 転送先上でのSnapshot Policyの作成
- 転送先上でのストレージクォータの設定
- 切り替え時
- SnapMirrorの最終同期 (可能であれば)
- 実施する場合は事前にNASクライアントからの通信を停止させ、静止点を確保する
- SnapMirrorのカットオーバー
- DNS CNAMEレコードの切り替え
- SPNの切り替え
- 転送先ボリュームへのSnapshot Policyの適用
- SnapMirrorの最終同期 (可能であれば)
検証環境
検証環境は以下のとおりです。
Single-AZのFSxNファイルシステムを別々のサブネットに配置しています。Private Subnet AのFSxNファイルシステム(以降FSxN A)内のボリュームをSnapMirrorを使ってもう片方のFSxNファイルシステム(以降FSxN B)のボリュームにレプリケーションをしています。
クラスターピアリングおよびSVMピアリングは設定済みです。
::*> cluster peer show
Peer Cluster Name Cluster Serial Number Availability Authentication
------------------------- --------------------- -------------- --------------
FsxId0cc0b3c12780c7d9f 1-80-000011 Available ok
::*> vserver peer show-all
Peer Peer Peering Remote
Vserver Vserver State Peer Cluster Applications Vserver
----------- ----------- ------------ ----------------- -------------- ---------
svm svm2 peered FsxId0cc0b3c12780c7d9f
snapmirror svm2
クラスターピアリングおよびSVMピアリングの設定方法は以下記事をご覧ください。
SMBサーバーのNetBIOS名は以下のように設定しています。
- SMB-SERVER : FSxN AのSMBサーバー
- SMB-SERVER2 : FSxN BのSMBサーバー
また、SMB暗号化を有効にしています。
詳細は以下のとおりです。
::*> cifs server show
Server Status Domain/Workgroup Authentication
Vserver Name Admin Name Style
----------- --------------- --------- ---------------- --------------
svm SMB-SERVER up CORP domain
::*> cifs security show -fields is-smb-encryption-required
vserver is-smb-encryption-required
------- --------------------------
svm true
::*> cifs server show
Server Status Domain/Workgroup Authentication
Vserver Name Admin Name Style
----------- --------------- --------- ---------------- --------------
svm2 SMB-SERVER2 up CORP domain
::*> cifs security show -fields is-smb-encryption-required
vserver is-smb-encryption-required
------- --------------------------
svm2 true
FSxN AのSMBサーバーのボリュームは以下のとおりです。
::*> volume show -fields type, state, size, used, available, percent-used, junction-path, security-style, snapshot-policy, autosize-mode
vserver volume size state security-style junction-path available used percent-used autosize-mode type snapshot-policy
------- -------- ---- ------ -------------- ------------- --------- ------ ------------ ------------- ---- ---------------
svm svm_root 1GB online unix / 970.7MB 2.15MB 0% off RW default
svm vol1 16GB online unix /vol1 13.19GB 2.01GB 13% off RW none
svm vol_ntfs 256GB
online ntfs /vol_ntfs 191.7GB 51.46GB
21% off RW snapshot-10min
3 entries were displayed.
::*> snapshot policy show snapshot-10min
Vserver: FsxId0e64a4f5386f74c87
Number of Is
Policy Name Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
snapshot-10min 1 true -
Schedule Count Prefix SnapMirror Label Retention Period
-------------- ----- ------------- ------------------ ------------------
10min 12 10min - 0 seconds
::*> snapshot show
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm svm_root
weekly.2024-10-13_0015 220KB 0% 9%
.
.
(中略)
.
.
hourly.2024-10-20_0705 148KB 0% 6%
vol1
test.2024-09-22_0957 284KB 0% 0%
vol_ntfs
test.2024-08-30_0648 356KB 0% 0%
test.2024-09-22_0958 34.38MB 0% 0%
10min.2024-10-20_0720 160KB 0% 0%
10min.2024-10-20_0730 144KB 0% 0%
15 entries were displayed.
SnapMirror設定前なのでFSxN BのSMBサーバーにはルートボリュームしか存在していない状態です。
:*> volume show -fields type, state, size, used, available, percent-used, junction-path, security-style, snapshot-policy, autosize-mode
vserver volume size state security-style junction-path available used percent-used autosize-mode type snapshot-policy
------- --------- ---- ------ -------------- ------------- --------- ----- ------------ ------------- ---- ---------------
svm2 svm2_root 1GB online ntfs / 972.4MB 404KB 0% off RW default
::*> snapshot policy show snapshot-10min
There are no entries matching your query.
FSxN AのSMBサーバー上のSMBファイル共有は以下のとおりです。
::*> cifs share show -fields share-name, path, acl
vserver share-name path acl
------- ---------- ---- ---------------------------------------
svm c$ / "BUILTIN\Administrators / Full Control"
svm "FSxN vol_ntfs"
/vol_ntfs
"Everyone / Full Control"
svm "FSxN 日本語共有"
/vol_ntfs/SMB share
"Everyone / Full Control"
svm FSxN日本語共有
/vol_ntfs/SMB share
"Everyone / Full Control"
svm ipc$ / -
svm "New folder"
/vol_ntfs/qtree1_renamed2/New folder
"Everyone / Read"
svm share /vol_ntfs
"Everyone / Full Control"
svm share_qtree
/vol_ntfs/qtree1_renamed
"Everyone / Full Control"
svm share_qtree_dir
/vol_ntfs/qtree2_renamed/dir
"Everyone / Full Control"
9 entries were displayed.
FSxN BのSMBサーバー上にはデフォルトのSMBファイル共有しか存在していない状態です。
::*> cifs share show -fields share-name, path, acl
vserver share-name path acl
------- ---------- ---- ---------------------------------------
svm2 c$ / "BUILTIN\Administrators / Full Control"
svm2 ipc$ / -
2 entries were displayed.
事前準備
SnapMirrorの設定
それでは切り替えの事前準備を行います。
まずはSnapMirrorの設定です。
FSxN B側からFSxN Aを転送元とするSnapMirror relationshipおよび転送先ボリューム作成と、初期転送を行います。
::*> snapmirror protect -path-list svm:vol_ntfs -destination-vserver svm2 -policy MirrorAllSnapshots -schedule 5min -auto-initialize true -support-tiering true -tiering-policy none
[Job 51] Job is queued: snapmirror protect for list of source endpoints beginning with "svm:vol_ntfs".
::*> snapmirror show
Progress
Source Destination Mirror Relationship Total Last
Path Type Path State Status Progress Healthy Updated
----------- ---- ------------ ------- -------------- --------- ------- --------
svm:vol_ntfs
XDP svm2:vol_ntfs_dst
Snapmirrored
Transferring 0B true 10/20 07:35:02
::*> snapmirror show -fields source-path, destination-path, state, status, progress-last-updated, total-progress
source-path destination-path state status total-progress progress-last-updated
------------ ----------------- ------------ ------------ -------------- ---------------------
svm:vol_ntfs svm2:vol_ntfs_dst Snapmirrored Transferring 18.76GB 10/20 07:36:51
::*> snapmirror show -fields source-path, destination-path, state, status, progress-last-updated, total-progress, last-transfer-size
source-path destination-path state status total-progress last-transfer-size progress-last-updated
------------ ----------------- ------------ ---------- -------------- ------------------ ---------------------
svm:vol_ntfs svm2:vol_ntfs_dst Snapmirrored Finalizing 39.92GB 58.06KB 10/20 07:38:56
::*> snapmirror show -fields source-path, destination-path, state, status, progress-last-updated, total-progress, last-transfer-size
source-path destination-path state status total-progress last-transfer-size progress-last-updated
------------ ----------------- ------------ ------ -------------- ------------------ ---------------------
svm:vol_ntfs svm2:vol_ntfs_dst Snapmirrored Idle - 41.60GB -
初期転送が完了しました。
FSxNで転送先ボリュームを確認します。
::*> volume show -fields type, state, size, used, available, percent-used, junction-path, security-style, snapshot-policy, autosize-mode
vserver volume size state security-style junction-path available used percent-used autosize-mode type snapshot-policy
------- --------- ---- ------ -------------- ------------- --------- ----- ------------ ------------- ---- ---------------
svm2 svm2_root 1GB online ntfs / 972.4MB 408KB 0% off RW default
svm2 vol_ntfs_dst
61.44GB
online ntfs - 6.68GB 51.69GB
88% grow_shrink DP none
2 entries were displayed.
::*> snapshot show -volume vol_ntfs_dst
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm2 vol_ntfs_dst
test.2024-08-30_0648 296KB 0% 0%
test.2024-09-22_0958 36.97MB 0% 0%
10min.2024-10-20_0720 261.7MB 0% 1%
10min.2024-10-20_0730 296KB 0% 0%
snapmirror.47963cae-8ead-11ef-9c67-4983eeb189eb_2148230170.2024-10-20_073500
236KB 0% 0%
10min.2024-10-20_0740 236KB 0% 0%
snapmirror.47963cae-8ead-11ef-9c67-4983eeb189eb_2148230170.2024-10-20_074000
156KB 0% 0%
7 entries were displayed.
::*> cifs share show -fields share-name, path, acl
vserver share-name path acl
------- ---------- ---- ---------------------------------------
svm2 c$ / "BUILTIN\Administrators / Full Control"
svm2 ipc$ / -
2 entries were displayed.
転送先ボリュームが作成され、転送元であるFSxN Aのボリュームと同じSnapshotが転送されました。
Snapshot Policyはnoneのようですね。
また、SnapMirrorしてもSMBファイル共有自体は転送されておらず、各ボリュームのジャンクションパスが設定されていないことも確認できます。
転送先ボリュームのジャンクションパスの設定
転送先ボリュームのジャンクションパスの設定をしましょう。
事前準備は以下NetApp KBにまとまっています。
クライアントアクセス用のDRの設定
- 必要に応じて、任意の/すべてのDRボリュームをネームスペースにマウントします。
- データLIFを作成し、必要に応じて名前解決を設定します。
- 必要に応じてNAS / SAN構成を作成/適用
- NFSエクスポートポリシーを作成/適用する
- CIFSサーバとCIFS共有の作成
- igroupとLUNマッピングの作成- クライアントトラフィック/アクセスに必要に応じて、DRボリュームにスケジュールとポリシーを適用します。
手順for SnapMirrorディザスタリカバリ(DR)テストとONTAPでのリバースSnapMirror - NetApp
必要に応じて、任意の/すべてのDRボリュームをネームスペースにマウントします。
がジャンクションパスの設定ですね。
転送元ボリュームと同じジャンクションパスを設定します。
::*> volume mount -volume vol_ntfs_dst -junction-path /vol_ntfs
Queued private job: 28
::*> volume show -volume vol_ntfs_dst -fields type, state, size, used, available, percent-used, junction-path, security-style, snapshot-policy, autosize-mode
vserver volume size state security-style junction-path available used percent-used autosize-mode type snapshot-policy
------- ------------ ------- ------ -------------- ------------- --------- ------- ------------ ------------- ---- ---------------
svm2 vol_ntfs_dst 61.44GB online ntfs /vol_ntfs 6.68GB 51.69GB 88% grow_shrink DP none
SMBファイル共有の設定
同様にNetApp KBに記載されているとおり、SMBファイル共有を作成します。
転送元であるFSxN AのSMBサーバーと同じパスのSMBファイル共有をFSxN BのSMBサーバーに2つ作成します。
::*> cifs share create -share-name "FSxN vol_ntfs" -path /vol_ntfs
::*> cifs share create -share-name "FSxN日本語共有" -path "/vol_ntfs/SMB share"
::*> cifs share show -fields share-name, path, acl
vserver share-name path acl
------- ---------- ---- ---------------------------------------
svm2 c$ / "BUILTIN\Administrators / Full Control"
svm2 "FSxN vol_ntfs"
/vol_ntfs
"Everyone / Full Control"
svm2 FSxN日本語共有
/vol_ntfs/SMB share
"Everyone / Full Control"
svm2 ipc$ / -
4 entries were displayed.
転送されたことの確認
FSxN AとFSxN BのSMBファイル共有にアクセスして転送されていることを確認します。
まず、FSxN AのSMBファイル共有へのアクセスです。
> ls "\\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
この時のセッションは以下のとおりです。Kerberos認証を使用しており、通信は暗号化されています。
::*> cifs session show -fields windows-user, address, auth-mechanism, shares, protocol-version, smb-encryption-status
node vserver session-id connection-id address auth-mechanism windows-user shares protocol-version smb-encryption-status
------------------------- ------- ------------------ ------------- ---------- -------------- ------------------ ------ ---------------- ---------------------
FsxId0e64a4f5386f74c87-01 svm 719450040472436877 239866910 10.0.0.139 Kerberos CORP\Administrator 2 SMB3_1 encrypted
続いて、FSxN BのSMBファイル共有へのアクセスです。
> ls "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
同じディレクトリが同じタイムスタンプで作成されていることから確かに転送されていると判断できます。
また、この時のセッションは以下のとおりです。FSxN Aの時と同様にKerberos認証を使用しており、通信は暗号化されています。
::*> cifs session show -fields windows-user, address, auth-mechanism, shares, protocol-version, smb-encryption-status
node vserver session-id connection-id address auth-mechanism windows-user shares protocol-version smb-encryption-status
------------------------- ------- -------------------- ------------- ---------- -------------- ------------------ ------ ---------------- ---------------------
FsxId0cc0b3c12780c7d9f-01 svm2 17634125815945887746 1991012094 10.0.0.139 Kerberos CORP\Administrator 1 SMB3_1 encrypted
DNS CNAMEレコード
現在はFSxN AとFSxN Bで異なるホスト名でアクセスしています。
業務を切り替えるにあたって、切り替え前後でホスト名が変化するのは避けたいところでしょう。エクスプローラーからアクセスする分には手動で切り替える形で問題ないかもしれないですが、パスが埋め込まれている場合は手動で対応するのは非常に手間がかかります。
そんな時によく出てくるのはDNSのCNAMEレコードを使った切り替えです。
今回もCNAMEレコード経由でアクセスできるか試してみます。
現在のDNSレコードは以下のとおりです。
> Get-DnsServerResourceRecord -ZoneName "corp.non-97.net" |
Where-Object {$_.HostName -like "SMB-SERVER*"} |
Format-List
DistinguishedName : DC=SMB-SERVER,DC=corp.non-97.net,cn=MicrosoftDNS,DC=DomainDnsZones,DC=corp,DC=non-97,DC=net
HostName : SMB-SERVER
RecordType : A
Type : 1
RecordClass : IN
TimeToLive : 1.00:00:00
Timestamp : 10/16/2024 9:00:00 PM
RecordData : 10.0.8.246
DistinguishedName : DC=SMB-SERVER2,DC=corp.non-97.net,cn=MicrosoftDNS,DC=DomainDnsZones,DC=corp,DC=non-97,DC=net
HostName : SMB-SERVER2
RecordType : A
Type : 1
RecordClass : IN
TimeToLive : 1.00:00:00
Timestamp : 10/20/2024 6:00:00 AM
RecordData : 10.0.9.128
以下AWS公式ドキュメントを参考にSMB-ALIAS
というSMB-SERVER
に対するCNAMEレコードを設定します。
> $Alias = "SMB-ALIAS.corp.non-97.net"
> $DnsName = "SMB-SERVER.corp.non-97.net"
> $AliasHost = $Alias.Split('.')[0]
> $ZoneName = ((Get-WmiObject Win32_ComputerSystem).Domain)
> $DnsServerComputerName = (Resolve-DnsName $ZoneName -Type NS | Where Type -eq 'A' | Select -ExpandProperty Name) | Select -First 1
> Add-DnsServerResourceRecordCName -Name $AliasHost -ComputerName $DnsServerComputerName -HostNameAlias $DnsName -ZoneName $ZoneName
> Get-DnsServerResourceRecord -ZoneName "corp.non-97.net" |
Where-Object {$_.HostName -like "SMB-*"} |
Format-List
DistinguishedName : DC=SMB-ALIAS,DC=corp.non-97.net,cn=MicrosoftDNS,DC=DomainDnsZones,DC=corp,DC=non-97,DC=net
HostName : SMB-ALIAS
RecordType : CNAME
Type : 5
RecordClass : IN
TimeToLive : 01:00:00
Timestamp : 0
RecordData : SMB-SERVER.corp.non-97.net.
DistinguishedName : DC=SMB-SERVER,DC=corp.non-97.net,cn=MicrosoftDNS,DC=DomainDnsZones,DC=corp,DC=non-97,DC=net
HostName : SMB-SERVER
RecordType : A
Type : 1
RecordClass : IN
TimeToLive : 1.00:00:00
Timestamp : 10/16/2024 9:00:00 PM
RecordData : 10.0.8.246
DistinguishedName : DC=SMB-SERVER2,DC=corp.non-97.net,cn=MicrosoftDNS,DC=DomainDnsZones,DC=corp,DC=non-97,DC=net
HostName : SMB-SERVER2
RecordType : A
Type : 1
RecordClass : IN
TimeToLive : 1.00:00:00
Timestamp : 10/20/2024 6:00:00 AM
RecordData : 10.0.9.128
CNAMEレコードが作成されました。
動作確認します。
> ls "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
ホスト名をCNAMEレコード名に設定してもアクセスできました。
その時のセッションは以下のとおりです。
::*> cifs session show -fields windows-user, address, auth-mechanism, shares, protocol-version, smb-encryption-status
node vserver session-id connection-id address auth-mechanism windows-user shares protocol-version smb-encryption-status
------------------------- ------- ------------------ ------------- ---------- -------------- ------------------ ------ ---------------- ---------------------
FsxId0e64a4f5386f74c87-01 svm 719450040472436877 239866910 10.0.0.139 Kerberos CORP\Administrator 2 SMB3_1 encrypted
FsxId0e64a4f5386f74c87-01 svm 719450040472436878 239866911 10.0.0.139 NTLMv2 CORP\Administrator 2 SMB3_1 encrypted
2 entries were displayed.
通信は暗号化されていますが、Kerberos認証ではなく、NTLM認証で認証されています。
これはSMB-ALIAS
のSPN設定がされておらず、Kerberos認証に失敗しているためです。
FSxNではデフォルトでKerberos認証を失敗するとNTLM認証にフォールバックします。詳細な挙動は以下記事をご覧ください。
SPNの設定
SMB-ALIAS
のSPNの設定を行います。
現在、SMB
から始まるSPNは以下のとおりです。
> SetSPN -T * -F -Q HOST/SMB*
Checking forest DC=corp,DC=non-97,DC=net
CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server.corp.non-97.net
HOST/smb-server.corp.non-97.net
HOST/SMB-SERVER
CN=SMB-SERVER2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server2.corp.non-97.net
HOST/smb-server2.corp.non-97.net
HOST/SMB-SERVER2
Existing SPN found!
SPNを設定するにあたってNetdom computername
を使用すると簡単に設定できると以下Microsoft Tech Communityで紹介されていました。
しかし、残念ながらFSxNではこちらのコマンドは使用できません。FSxNでAD DCからの全てのトラフィックを許可していたとしても以下のようにエラーになります。
> netdom computername SMB-SERVER /add:smb-alias.corp.non-97.net
Unable to add smb-alias.corp.non-97.net
as an alternate name for the computer.
The error is:
The interface is unknown.
The command failed to complete successfully.
> netdom computername SMB-SERVER.CORP.NON-97.NET /add:smb-alias.corp.non-97.net
Unable to add smb-alias.corp.non-97.net
as an alternate name for the computer.
The error is:
The interface is unknown.
The command failed to complete successfully.
手動でSPNを設定します。
> $FileSystemHost = (Resolve-DnsName $DnsName | Where Type -eq 'A')[0].Name.Split(".")[0]
> $FSxAdComputer = (Get-AdComputer -Identity $FileSystemHost)
> Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHostname"="$Alias"}
> SetSPN -T * -F -Q HOST/SMB*
Checking forest DC=corp,DC=non-97,DC=net
CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/SMB-ALIAS.corp.non-97.net
HOST/SMB-ALIAS.corp.non-97.net
HOST/SMB-ALIAS
cifs/smb-server.corp.non-97.net
HOST/smb-server.corp.non-97.net
HOST/SMB-SERVER
CN=SMB-SERVER2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server2.corp.non-97.net
HOST/smb-server2.corp.non-97.net
HOST/SMB-SERVER2
Existing SPN found!
SMB-SERVER
のエイリアスとしてSMB-ALIAS
のSPNが登録されましたね。
SMBでSMB-ALIAS
に対してアクセスします。
> ls "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
この時のセッションは以下のとおりです。
::*> cifs session show -fields windows-user, address, auth-mechanism, shares, protocol-version, smb-encryption-status
node vserver session-id connection-id address auth-mechanism windows-user shares protocol-version smb-encryption-status
------------------------- ------- ------------------ ------------- ---------- -------------- ------------------ ------ ---------------- ---------------------
FsxId0e64a4f5386f74c87-01 svm 719450040472436877 239866910 10.0.0.139 Kerberos CORP\Administrator 2 SMB3_1 encrypted
FsxId0e64a4f5386f74c87-01 svm 719450040472436879 239866912 10.0.0.139 Kerberos CORP\Administrator 1 SMB3_1 encrypted
2 entries were displayed.
Kerberos認証で認証されていることが分かりますね。
アクセス先SMBサーバーの切り替え
NACL制御
それではアクセス先SMBサーバーの切り替えを行います。
実際にDRを発動させる際は転送元のFSxNに対する操作は行えないことがほとんどでしょう。
今回は転送元FSxNファイルシステムが稼働しているサブネットに対してインバウンドルールとアウトバウンドルールどちらもDenyルールしかないNACLを適用し、操作を制限します。
NACL適用後のクラスターピアリング、SVMピアリング、SnapMirrorの状態は以下のとおりです。
::*> cluster peer show
Peer Cluster Name Cluster Serial Number Availability Authentication
------------------------- --------------------- -------------- --------------
FsxId0e64a4f5386f74c87 1-80-000011 Unavailable ok
::*> vserver peer show
Peer Peer Peering Remote
Vserver Vserver State Peer Cluster Applications Vserver
----------- ----------- ------------ ----------------- -------------- ---------
svm2 svm peered FsxId0e64a4f5386f74c87
snapmirror svm
::*> snapmirror show-history -max-rows-per-relationship 5 -fields start-time, end-time, result, transfer-size, additional-info
destination-path operation-id start-time end-time result transfer-size additional-info
----------------- ------------- ------------------- ------------------- ------- ------------- ------------------------------------------------------------------------------------------------------------------------------------------
svm2:vol_ntfs_dst ..(中略).. 10/20/2024 08:50:00 10/20/2024 08:50:02 failure - Scheduled update failed to start. (Scheduledupdate was delayed because another SnapMirror operation for the relationship is in progress.)
svm2:vol_ntfs_dst ..(中略).. 10/20/2024 08:45:00 10/20/2024 08:45:02 failure - Scheduled update failed to start. (Scheduledupdate was delayed because another SnapMirror operation for the relationship is in progress.)
svm2:vol_ntfs_dst ..(中略).. 10/20/2024 08:40:00 10/20/2024 08:40:02 failure - Scheduled update failed to start. (Scheduledupdate was delayed because another SnapMirror operation for the relationship is in progress.)
svm2:vol_ntfs_dst ..(中略).. 10/20/2024 08:30:00 10/20/2024 08:30:05 success 14.25KB -
svm2:vol_ntfs_dst ..(中略).. 10/20/2024 08:25:00 10/20/2024 08:25:04 success 3.48KB -
5 entries were displayed.
::*> snapshot show -volume vol_ntfs_dst
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm2 vol_ntfs_dst
test.2024-08-30_0648 296KB 0% 0%
test.2024-09-22_0958 36.97MB 0% 0%
10min.2024-10-20_0720 261.7MB 0% 1%
.
.
(中略)
.
.
10min.2024-10-20_0820 260KB 0% 0%
snapmirror.47963cae-8ead-11ef-9c67-4983eeb189eb_2148230170.2024-10-20_082500
280KB 0% 0%
10min.2024-10-20_0830 232KB 0% 0%
snapmirror.47963cae-8ead-11ef-9c67-4983eeb189eb_2148230170.2024-10-20_083000
152KB 0% 0%
12 entries were displayed.
クラスターピアリングはUnavailable
に、SnapMirrorは転送に失敗するようになりました。
SnapMirrorのカットオーバー
SnapMirrorのカットオーバーを行います。
カットオーバーするにあたって、次回以降のSnapMirrorの転送を行わないように設定します。
::*> snapmirror quiesce -destination-path svm2:vol_ntfs_dst
Operation succeeded: snapmirror quiesce for destination "svm2:vol_ntfs_dst".
::*> snapmirror show
Progress
Source Destination Mirror Relationship Total Last
Path Type Path State Status Progress Healthy Updated
----------- ---- ------------ ------- -------------- --------- ------- --------
svm:vol_ntfs
XDP svm2:vol_ntfs_dst
Snapmirrored
Quiescing 0B false 10/20 08:50:20
しかし、設定して20分以上経過してもQuiescing
からステータスは変わりませんでした。
::*> snapmirror show -fields state, status, healthy, unhealthy-reason
source-path destination-path state status healthy unhealthy-reason
------------ ----------------- ------------ --------- ------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
svm:vol_ntfs svm2:vol_ntfs_dst Snapmirrored Quiescing false Scheduled update failed to start. (Transfer did not start. The relationship is quiesced, or Vserverpeering between source and destination Vservers has been suspended or removed.)
SnapMirrorのタイムアウトまで待つのも勿体無いため、強制的にカットオーバーします。
::*> snapmirror break -destination-path svm2:vol_ntfs_dst
Error: command failed: Another transfer is in progress.
::*> snapmirror break -destination-path svm2:vol_ntfs_dst -force
Operation succeeded: snapmirror break for destination "svm2:vol_ntfs_dst".
::*> snapmirror show
Progress
Source Destination Mirror Relationship Total Last
Path Type Path State Status Progress Healthy Updated
----------- ---- ------------ ------- -------------- --------- ------- --------
svm:vol_ntfs
XDP svm2:vol_ntfs_dst
Broken-off
Idle - false -
Broken-off
になりましたね。
転送先ボリュームの状態を確認すると、RW
に変わっていました。
::*> volume show -fields type, state, size, used, available, percent-used, junction-path, security-style, snapshot-policy, autosize-mode
vserver volume size state security-style junction-path available used percent-used autosize-mode type snapshot-policy
------- --------- ---- ------ -------------- ------------- --------- ----- ------------ ------------- ---- ---------------
svm2 svm2_root 1GB online ntfs / 972.3MB 504KB 0% off RW default
svm2 vol_ntfs_dst
61.44GB
online ntfs /vol_ntfs 7.13GB 51.24GB
87% grow_shrink RW none
2 entries were displayed.
Snapshot Policyやボリュームサイズの自動拡張は特に変わりありません。
今回は割愛しますが、転送先ボリュームへのSnapshot Policyの適用が必要であれば設定しておきましょう。
書き込みできることを確認
RW
に変わったということで書き込みできるかを確認しましょう。
> ls "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
> echo test > "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share\test.txt"
> ls "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
-a---- 10/20/2024 9:10 AM 14 test.txt
問題なく書き込みできますね。
このときのセッションは以下のとおりです。
::*> cifs session show -fields windows-user, address, auth-mechanism, shares, protocol-version, smb-encryption-status
node vserver session-id connection-id address auth-mechanism windows-user shares protocol-version smb-encryption-status
------------------------- ------- -------------------- ------------- ---------- -------------- ------------------ ------ ---------------- ---------------------
FsxId0cc0b3c12780c7d9f-01 svm2 17634125815945887750 1991012101 10.0.0.139 Kerberos CORP\Administrator 1 SMB3_1 encrypted
DNS CNAMEレコードの変更
エイリアスであるSMB-ALIAS
でアクセスできるように、DNS CNAMEレコードの変更を行います。
CNAMEレコードの値をSMB-SERVER2
に変更します。
> $DnsName = "SMB-SERVER2.corp.non-97.net."
> $Record = Get-DnsServerResourceRecord -ZoneName $ZoneName -Name $AliasHost -RRType CNAME
> $NewRecord = $Record.Clone()
> $NewRecord.RecordData.HostNameAlias = $DnsName
> Set-DnsServerResourceRecord -ZoneName $ZoneName -OldInputObject $Record -NewInputObject $NewRecord
> Get-DnsServerResourceRecord -ZoneName $ZoneName -Name $AliasHost -RRType CNAME
HostName RecordType Type Timestamp TimeToLive RecordData
-------- ---------- ---- --------- ---------- ----------
SMB-ALIAS CNAME 5 0 01:00:00 SMB-SERVER2.corp.non-97.net.
SMB-ALIAS
へアクセスしてみましょう。
> ls "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share"
ls : Cannot find path '\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share' because it does not exist.
At line:1 char:1
+ ls "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\SMB-ALIAS.cor..._ntfs\SMB share:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
> ls "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/11/2024 8:39 AM .aws-datasync
d----- 10/11/2024 7:20 AM SMB share
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
-a---- 10/20/2024 9:10 AM 14 test.txt
はい、弾かれました。
これはSPNがまだ転送元であるSMB-SERVER
に紐づいているためです。
SPNの変更
SMB-ALIAS
がSMB-SERVER2
のエイリアスとなるようにSPNを設定します。
SPNは重複するような値を設定しようとするとエラーになります。
Domain Controllers running Windows Server 2012 R2 block the creation of duplicate service principal names (SPN) and user principal names (UPN). This includes if the restoration or reanimation of a deleted object or the renaming of an object would result in a duplicate.
実際に試すと以下のようになります。
> Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHostname"="$Alias"}
Set-AdComputer : The requested name already exists as a unique identifier
At line:1 char:1
+ Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHos ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=SMB-SERVER2,...C=non-97,DC=net:ADComputer) [Set-ADComputer], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8571,Microsoft.ActiveDirectory.Management.Commands.SetADComputer
そのため、既存のSPNを一度削除する必要があります。
SMB-ALIAS
から始まるSPNを削除します。
> SetSPN -T * -F -Q HOST/SMB*
Checking forest DC=corp,DC=non-97,DC=net
CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/SMB-ALIAS.corp.non-97.net
HOST/SMB-ALIAS.corp.non-97.net
HOST/SMB-ALIAS
cifs/smb-server.corp.non-97.net
HOST/smb-server.corp.non-97.net
HOST/SMB-SERVER
CN=SMB-SERVER2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server2.corp.non-97.net
HOST/smb-server2.corp.non-97.net
HOST/SMB-SERVER2
Existing SPN found!
> SetSPN /D ("HOST/" + ${Alias}) ${FSxAdComputer}.Name
Unregistering ServicePrincipalNames for CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
HOST/SMB-ALIAS.corp.non-97.net
Updated object
> SetSPN /D ("HOST/" + ${Alias}.Split(".")[0]) ${FSxAdComputer}.Name
Unregistering ServicePrincipalNames for CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
HOST/SMB-ALIAS
Updated object
> SetSPN /D ("cifs/" + ${Alias}) ${FSxAdComputer}.Name
Unregistering ServicePrincipalNames for CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/SMB-ALIAS.corp.non-97.net
Updated object
> SetSPN -T * -F -Q HOST/SMB*
Checking forest DC=corp,DC=non-97,DC=net
CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server.corp.non-97.net
HOST/smb-server.corp.non-97.net
HOST/SMB-SERVER
CN=SMB-SERVER2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server2.corp.non-97.net
HOST/smb-server2.corp.non-97.net
HOST/SMB-SERVER2
Existing SPN found!
SMB-ALIAS
がSMB-SERVER2
のエイリアスとなるSPNを設定します。
> $DnsName = "SMB-SERVER2.corp.non-97.net."
> $FileSystemHost = (Resolve-DnsName $DnsName | Where Type -eq 'A')[0].Name.Split(".")[0]
> $FSxAdComputer = (Get-AdComputer -Identity $FileSystemHost)
> Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHostname"="$Alias"}
Set-AdComputer : The requested name already exists as a unique identifier
At line:1 char:1
+ Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHos ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=SMB-SERVER2,...C=non-97,DC=net:ADComputer) [Set-ADComputer], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8571,Microsoft.ActiveDirectory.Management.Commands.SetADComputer
はい、SPNを削除したにも関わらずエラーになってしまいました。
SMB-SERVER
のコンピューターオブジェクトを確認しましょう。
> $DnsName = "SMB-SERVER.corp.non-97.net"
> $FileSystemHost = (Resolve-DnsName $DnsName | Where Type -eq 'A')[0].Name.Split(".")[0]
> $FSxAdComputer = (Get-AdComputer -Identity $FileSystemHost)
> Get-ADComputer $FileSystemHost -Properties msDS-AdditionalDnsHostname
DistinguishedName : CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
DNSHostName : SMB-SERVER.CORP.NON-97.NET
Enabled : True
msDS-AdditionalDnsHostname : {SMB-ALIAS.corp.non-97.net}
Name : SMB-SERVER
ObjectClass : computer
ObjectGUID : 2b010e66-4884-4b62-9088-9f0ea79a5503
SamAccountName : SMB-SERVER$
SID : S-1-5-21-38571244-2121234638-1230449559-1632
UserPrincipalName :
msDS-AdditionalDnsHostname
にSMB-ALIAS.corp.non-97.net
が設定されたままですね。
msDS-AdditionalDnsHostname
を削除しましょう。
> Set-ADComputer $FileSystemHost -Clear msDS-AdditionalDnsHostname
> Get-ADComputer $FileSystemHost -Properties msDS-AdditionalDnsHostname
DistinguishedName : CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
DNSHostName : SMB-SERVER.CORP.NON-97.NET
Enabled : True
Name : SMB-SERVER
ObjectClass : computer
ObjectGUID : 2b010e66-4884-4b62-9088-9f0ea79a5503
SamAccountName : SMB-SERVER$
SID : S-1-5-21-38571244-2121234638-1230449559-1632
UserPrincipalName :
msDS-AdditionalDnsHostname
削除後、再度SPNの登録をします。
> $DnsName = "SMB-SERVER2.corp.non-97.net."
> $FileSystemHost = (Resolve-DnsName $DnsName | Where Type -eq 'A')[0].Name.Split(".")[0]
> $FSxAdComputer = (Get-AdComputer -Identity $FileSystemHost)
> Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHostname"="$Alias"}
> SetSPN -T * -F -Q HOST/SMB*
Checking forest DC=corp,DC=non-97,DC=net
CN=SMB-SERVER2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/SMB-ALIAS.corp.non-97.net
HOST/SMB-ALIAS.corp.non-97.net
HOST/SMB-ALIAS
cifs/smb-server2.corp.non-97.net
HOST/smb-server2.corp.non-97.net
HOST/SMB-SERVER2
CN=SMB-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
cifs/smb-server.corp.non-97.net
HOST/smb-server.corp.non-97.net
HOST/SMB-SERVER
Existing SPN found!
問題なく登録できました。
SMB-ALIAS
でアクセスできるか確認します。
> ls "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
.
.
(中略)
.
.
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
-a---- 10/20/2024 9:10 AM 14 test.txt
> echo test2 > "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share\test2.txt"
> ls "\\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share"
Directory: \\SMB-ALIAS.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
.
.
(中略)
.
.
d----- 10/14/2024 11:17 PM SMB日本語フォルダ
-a---- 10/20/2024 9:10 AM 14 test.txt
-a---- 10/20/2024 12:51 PM 16 test2.txt
問題なくアクセスできました。
このときのセッションは以下のとおりです。
::*> cifs session show -fields windows-user, address, auth-mechanism, shares, protocol-version, smb-encryption-status
node vserver session-id connection-id address auth-mechanism windows-user shares protocol-version smb-encryption-status
------------------------- ------- -------------------- ------------- ---------- -------------- ------------------ ------ ---------------- ---------------------
FsxId0cc0b3c12780c7d9f-01 svm2 17634125815945887761 1991012112 10.0.0.139 Kerberos CORP\Administrator 2 SMB3_1 encrypted
Kerberos認証で認証できていますね。
また、以下のとおりSMB-ALIAS
で変更した内容がSMB-SERVER2
でアクセスして確認できることから、確かにエイリアスが効いていることが分かります。
> ls "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share\test2.txt"
Directory: \\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 10/20/2024 12:51 PM 16 test2.txt
> cat "\\SMB-SERVER2.corp.non-97.net\FSxN vol_ntfs\SMB share\test2.txt"
test2
事前準備と切り替えテストをして感覚をつかもう
Amazon FSx for NetApp ONTAPのSMBサーバーをSnapMirrorのレプリケーション先の別SMBサーバーに切り替える手順を整理してみました。
事前準備をしっかりしていれば切り替え時の操作はそこまで多くない印象です。切り替えテストを実施して感覚をつかんでおくと良いでしょう。
注意点はSnapMirrorで転送される情報を整理しておくことです。
SnapMirrorで転送されるのはボリューム内のブロックデータです。原則ONTAP CLIコマンドで設定する要素は転送されません。そのため、今回は触れませんでしたが、NASアクセスの監査ログやストレージクォータ設定についても事前に転送先で設定しておくと良いでしょう。
ただし、ONTAP CLIで操作するリソースであっても、qtreeのようにボリューム内に含まれるデータは転送されます。実際の挙動は以下記事をご覧ください。
切り戻し(フェイルバック)時の作業については別記事でまとめる予定です。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!